package pam.client.console;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import pam.client.config.Config;
import pam.client.dao.Dao;
import pam.client.dao.IDao;
import pam.client.entities.FeuilleSalaire;
import pam.client.entities.PamException;

import java.util.ArrayList;

@SpringApplicationConfiguration(classes = Config.class)
public class Main {

  // constantes
  static private final String urlServiceRest = "http://localhost:8080";
  static private final int timeout = 1000;




  static private String ajouteInfo(String message, String valeur) {
    return message + " : " + valeur + "\n";
  }

  public static void main(String args[]) {
      //Créé le lien vers la couche DAO, @Autowired n'esy plus util
      IDao dao = new Dao();

      dao.setTimeout(timeout);
      dao.setUrlServiceRest(urlServiceRest);

      // données locales
      final String syntaxe = "pg num_securite_sociale nb_heures_travaillées nb_jours_travaillés";
      // on vérifie le nombre de paramètres
      if (args.length!=3)
      {
          System.out.print("syntaxe : " + syntaxe+"\n");
          return;
      }
      // liste des erreurs
      ArrayList erreurs = new ArrayList();
      // le second paramètre doit être un nombre réel >0
      int nb_heures_travaillees = Integer.parseInt(args[1]);
      // erreur ?
      if (nb_heures_travaillees<0) {
          erreurs.add("Le nombre d'heures travaillées [" + args[1] + "] est erroné");
      }
      // le troisième paramètre doit être un nombre entier >0
      int nb_jours_travailles = Integer.parseInt(args[2]);
      // erreur ?
      if ( nb_jours_travailles<0) {
          erreurs.add("Le nombre de jours travaillés [" + args[2] + "] est erroné");
      }
      // des erreurs ?
      if (erreurs.size() != 0) {
          for (int i = 0; i < erreurs.size(); i++) {
              System.err.println(erreurs.get(i));
          }
          return;
      }
      // c'est bon - on peut demander la feuille de salaire
      FeuilleSalaire feuilleSalaire = null;
      try {
          feuilleSalaire =  dao.getFeuilleSalaire(args[0], nb_heures_travaillees, nb_jours_travailles);
      } catch (PamException ex) {
          System.err.println("L'erreur suivante s'est produite : " + ex.getMessage());
          return;
      } catch (Exception ex) {
          System.err.println("L'erreur suivante s'est produite : " + ex.toString());
          return;
      }
      // affichage détaillé
      String output = "Valeurs saisies :\n";
      output += ajouteInfo("N° de sécurité sociale de l'employé", args[0]);
      output += ajouteInfo("Nombre d'heures travaillées", args[1]);
      output += ajouteInfo("Nombre de jours travaillés", args[2]);
      output += ajouteInfo("\nInformations Employé", "");
      output += ajouteInfo("Nom", feuilleSalaire.getEmploye().getNom());
      output += ajouteInfo("Prénom", feuilleSalaire.getEmploye().getPrenom());
      output += ajouteInfo("Adresse", feuilleSalaire.getEmploye().getAdresse());
      output += ajouteInfo("Ville", feuilleSalaire.getEmploye().getVille());
      output += ajouteInfo("Code Postal", feuilleSalaire.getEmploye().getCodePostal());
      output += ajouteInfo("Indice", ""
              + feuilleSalaire.getEmploye().getIndemnite().getIndice());
      output += ajouteInfo("\nInformations Cotisations", "");
      output += ajouteInfo("CSGRDS", "" + feuilleSalaire.getCotisation().getCsgrds() + " %");
      output += ajouteInfo("CSGD", "" + feuilleSalaire.getCotisation().getCsgd() + " %");
      output += ajouteInfo("Retraite", "" + feuilleSalaire.getCotisation().getRetraite() + "%");
      output += ajouteInfo("Sécurité sociale", "" + feuilleSalaire.getCotisation().getSecu() + " %");
      output += ajouteInfo("\nInformations Indemnités", "");
      output += ajouteInfo("Salaire horaire", ""
              + feuilleSalaire.getEmploye().getIndemnite().getBaseHeure() + " euro");
      output += ajouteInfo("Entretien/jour", ""
              + feuilleSalaire.getEmploye().getIndemnite().getEntretienJour() + " euro");
      output += ajouteInfo("Repas/jour", ""
              + feuilleSalaire.getEmploye().getIndemnite().getRepasJour() + " euro");
      output += ajouteInfo("Congés Payés", ""
              + feuilleSalaire.getEmploye().getIndemnite().getIndemnitesCP() + " %");
      output += ajouteInfo("\nInformations Salaire", "");
      output += ajouteInfo("Salaire de base", ""
              + feuilleSalaire.getElementsSalaire().getSalaireBase() + " euro");
      output += ajouteInfo("Cotisations sociales", ""
              + feuilleSalaire.getElementsSalaire().getCotisationsSociales() + " euro");
      output += ajouteInfo("Indemnités d'entretien", ""
              + feuilleSalaire.getElementsSalaire().getIndemnitesEntretien() + " euro");
      output += ajouteInfo("Indemnités de repas", ""
              + feuilleSalaire.getElementsSalaire().getIndemnitesRepas() + " euro");
      output += ajouteInfo("Salaire net", ""
              + feuilleSalaire.getElementsSalaire().getSalaireNet() + " euro");
      System.out.println(output);
  }
}
